package org.example.managere.service.feibiao;

import org.example.managere.dto.feibiao.AmKnowledgeFailureDto;
import org.example.managere.dto.feibiao.AmKnowledgeBasicDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;

/**
 * 电机故障信息服务接口 - 电机向量知识库 (精简版)
 */
public interface AmKnowledgeFailureService {
    
    /**
     * 保存电机故障信息
     * @param dto 电机故障信息DTO
     * @return 保存后的电机故障信息DTO
     */
    AmKnowledgeFailureDto save(AmKnowledgeFailureDto dto);
    
    /**
     * 根据ID查找电机故障信息
     * @param id 故障ID
     * @return 可能包含电机故障信息的Optional
     */
    Optional<AmKnowledgeFailureDto> findById(Integer id);
    
    /**
     * 更新电机故障信息
     * @param dto 电机故障信息DTO
     * @return 更新后的电机故障信息DTO
     */
    AmKnowledgeFailureDto update(AmKnowledgeFailureDto dto);
    
    /**
     * 删除电机故障信息
     * @param id 故障ID
     */
    void deleteById(Integer id);
    
    /**
     * 查找所有电机故障信息
     * @return 电机故障信息DTO列表
     */
    List<AmKnowledgeFailureDto> findAll();
    
    /**
     * 分页查询电机故障信息
     * @param pageable 分页参数
     * @return 电机故障信息DTO分页结果
     */
    Page<AmKnowledgeFailureDto> findAll(Pageable pageable);
    
    /**
     * 根据关键字搜索电机故障信息
     * @param keyword 关键字
     * @param pageable 分页参数
     * @return 电机故障信息DTO分页结果
     */
    Page<AmKnowledgeFailureDto> searchByKeyword(String keyword, Pageable pageable);
    
    /**
     * 根据电机ID查询故障记录
     * @param motorId 电机ID
     * @return 故障记录列表
     */
    List<AmKnowledgeFailureDto> findByMotorId(String motorId);
    
    /**
     * 查询未修复的故障记录
     * @return 未修复的故障记录列表
     */
    List<AmKnowledgeFailureDto> findUnrepairedFailures();
    
    /**
     * 统计未修复故障的数量
     * @return 未修复故障数量
     */
    long countUnrepairedFailures();
    
    /**
     * 查询平均响应时间（发现到修复时间）
     * @return 平均响应时间（小时）
     */
    Double findAverageRepairEfficiency();
    
    /**
     * 获取所有可用的电机列表
     * @return 电机基础信息DTO列表
     */
    List<AmKnowledgeBasicDto> findAllMotors();
} 